//********************************************************************
//	created:	13:10:2011   9:42
//	filename: 	config.h
//	author:		tiamo
//	purpose:	config
//********************************************************************

#pragma once

namespace utils
{
	//
	// config
	//
	class Config
	{
	public:
		//
		// constructor
		//
		Config()															{}

		//
		// destructor
		//
		~Config()															{}

		//
		// open config file
		//
		void openConfigFile(wchar_t const* configFileName);

		//
		// get string
		//
		UniString getString(wchar_t const* configPath, wchar_t const* defaultValue);

		//
		// get int
		//
		int32_t getInt(wchar_t const* configPath, int32_t defaultValue);

		//
		// get string
		//
		UniString getString(UniString const& path, wchar_t const* defaultV)	{return getString(path.c_str(), defaultV);}

		//
		// get int
		//
		int32_t getInt(UniString const& configPath, int32_t defaultValue)	{return getInt(configPath.c_str(), defaultValue);}

		//
		// get boolean
		//
		bool getBoolean(wchar_t const* configPath, bool defaultValue)		{return stringToBoolean(getString(configPath, defaultValue ? L"true" : L"false"));}

		//
		// get boolean
		//
		bool getBoolean(UniString const& configPath, bool defaultValue)		{return stringToBoolean(getString(configPath.c_str(), defaultValue ? L"true" : L"false"));}

		//
		// get string
		//
		UniString getString(wchar_t const* configPath)						{return mConfigParser.getString(configPath);}

		//
		// get string
		//
		UniString getString(UniString const& configPath)					{return mConfigParser.getString(configPath.c_str());}

		//
		// get int
		//
		int32_t getInt(wchar_t const* configPath)							{return mConfigParser.getNumber<int32_t>(configPath);}

		//
		// get int
		//
		int32_t getInt(UniString const& configPath)							{return mConfigParser.getNumber<int32_t>(configPath.c_str());}

		//
		// get boolean
		//
		bool getBoolean(wchar_t const* configPath)							{return stringToBoolean(getString(configPath));}

		//
		// get boolean
		//
		bool getBoolean(UniString const& configPath)						{return stringToBoolean(getString(configPath.c_str()));}

	private:
		//
		// strint -> boolean
		//
		bool stringToBoolean(UniString const& strintValue)					{return strintValue == L"1" || !platform::wcsicmp(strintValue.c_str(), L"true");}

	private:
		//
		// xml parser
		//
		XmlParser															mConfigParser;
	};
}
